package com.ruoyi.business.payment.domain;

import java.math.BigDecimal;
import java.util.Date;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.ruoyi.common.annotation.Excel;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.experimental.Accessors;

/**
 * 预支付订单信息对象 t_register_payment_order
 *
 * @author Tellsea
 * @date 2025-06-22
 */
@Data
@Accessors(chain = true)
@ToString(callSuper = true)
@EqualsAndHashCode(callSuper = true)
public class TRegisterPaymentOrder extends BaseEntity {

    /**
     * 订单id
     */
    @TableId(type = IdType.ASSIGN_ID)
    @JsonSerialize(using= ToStringSerializer.class)
    private Long id;

    /**
     * 报名信息ID
     */
    @Excel(name = "报名信息ID")
    private Long registerId;

    /**
     * 姓名
     */
    @Excel(name = "姓名")
    private String userName;

    /**
     * 手机号
     */
    @Excel(name = "手机号")
    private String phoneNumber;

    /**
     * 身份证号码
     */
    @Excel(name = "身份证号码")
    private String idCard;

    /**
     * 支付金额,单位元,两位小数
     */
    @Excel(name = "支付金额,单位元,两位小数")
    private BigDecimal paymentAmount;

    /**
     * 支付完成时间
     */
    @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
    @Excel(name = "支付完成时间", width = 30, dateFormat = "yyyy/MM/dd HH:mm:ss")
    private Date paymentTime;

    /**
     * 订单状态，订单状态，0：已下单待支付，1：支付完成，2：支付失败，3：已关闭，4：退款中，5：已退款
     */
    @Excel(name = "订单状态，0：已下单待支付，1：支付完成，2：支付失败，3：已关闭，4：退款中，5：已退款")
    private Integer paymentStatus;

    /**
     * 退款时间
     */
    @JsonFormat(pattern = "yyyy/MM/dd HH:mm:ss")
    @Excel(name = "退款时间", width = 30, dateFormat = "yyyy/MM/dd HH:mm:ss")
    private Date refundTime;

    /**
     * 退款ID
     */
    @Excel(name = "退款ID")
    private String refundId;

    /**
     * 退款金额
     */
    @Excel(name = "退款金额")
    private BigDecimal refundAmount;

    /**
     * 退款原因
     */
    @Excel(name = "退款原因")
    private String refundReason;

    /**
     * 退款状态: 0-待审批, 1-审批中, 2-已审批, 3-已拒绝, 4-执行中, 5-已完成, 6-已失败
     */
    @Excel(name = "退款状态: 0-待审批, 1-审批中, 2-已审批, 3-已拒绝, 4-执行中, 5-已完成, 6-已失败")
    private Integer refundStatus;

    /**
     * 渠道退款单号
     */
    @Excel(name = "渠道退款单号")
    private String channelRefundNo;

    /**
     * 渠道支付单号
     */
    @Excel(name = "渠道支付单号")
    private String channelPaymentNo;

    /**
     * 进修费用
     */
    @Excel(name = "进修费用")
    private BigDecimal engageAmount;

    /**
     * 实验费用
     */
    @Excel(name = "实验费用")
    private BigDecimal materialAmount;

    /**
     * 显微血管缝合操作培训费用
     */
    @Excel(name = "显微血管缝合操作培训费用")
    private BigDecimal joinMicrosutureAmount;

    /**
     * 支付类型
     */
    @Excel(name = "支付类型，1、线上缴费，2、线下缴费")
    private Integer payDataType;

    /**
     * 支付渠道订单号
     */
    @Excel(name = "支付渠道订单号")
    private String channelOrderNo;

    /**
     * 收费详情，jsonArr方式
     */
    @Excel(name = "收费详情，jsonArr方式")
    private String chargeDetail;

    /**
     * 备注
     */
    @Excel(name = "备注")
    private String remark;

    /**
     * 是否删除 1-是 2-否
     */
    @TableField(fill = FieldFill.INSERT)
    private Long deleteStatus;

    /**
     * 支付或者退款失败原因
     */
    @Excel(name = "支付或者退款失败原因")
    private String failureReason;

}
